﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations.Schema;

namespace Biblioteca.Logica_Negocio.Domain_Model
{

    [Table("Ejemplares")]
    public class Ejemplar
    {
        public enum EstadoEjemplar { Disponible = 1, NoDisponible = 2 }

        public Ejemplar()
        {
        }

        public Ejemplar(int id, int codigo, Material material)
        {
            this.Estado = EstadoEjemplar.Disponible;
            this.Id = id;
            this.Codigo = codigo;
            this.Prestamos = new List<Prestamo>();
            this.Material = material;
        }

        public int Id { get; protected set; }

        public int Codigo { get; protected set; }

        public virtual int EstadoInterno { get; set; }

        [NotMapped]
        public EstadoEjemplar Estado
        {
            get { return (EstadoEjemplar)EstadoInterno; }
            set { EstadoInterno = (int)value; }
        }

        public virtual Material Material { get; protected set; }

        public virtual ICollection<Prestamo> Prestamos { get; protected set; }


        public void Reasignar() {
            this.Material.Asignar(this);
        }

        public void PonerDisponible() {
            this.Estado = EstadoEjemplar.Disponible;
        }

        public void PonerNoDisponible() {
            this.Estado = EstadoEjemplar.NoDisponible;
        }

        public bool Disponible() {
            return (Estado == EstadoEjemplar.Disponible);
        }

        public void AgregarPrestamo(Prestamo p) {
            this.Prestamos.Add(p);
        }

    }
}
